﻿
// YunDunDefenderDlg.cpp: 实现文件
//

#include "../winapp/framework.h"
#include "../winapp/YunDunDefender.h"
#include "YunDunDefenderDlg.h"
#include "afxdialogex.h"
#include "../module/InjectFramework.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CYunDunDefenderDlg 对话框



CYunDunDefenderDlg::CYunDunDefenderDlg(CWnd* pParent /*=nullptr*/)
	: CDialogEx(IDD_YUNDUNDEFENDER_DIALOG, pParent), m_self_ptr(this)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

CYunDunDefenderDlg::~CYunDunDefenderDlg()
{
	// 获取当前进程句柄
	HANDLE hProcess = GetCurrentProcess();

	// 使用指定的退出代码终止进程
	TerminateProcess(hProcess, EXIT_SUCCESS);
}

void CYunDunDefenderDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_TABCTRL, m_TabCtrl);
}

BEGIN_MESSAGE_MAP(CYunDunDefenderDlg, CDialogEx)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_WM_SIZE()
	ON_WM_ACTIVATE()
END_MESSAGE_MAP()


// CYunDunDefenderDlg 消息处理程序

BOOL CYunDunDefenderDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	auto& framewk = ProcessFramework::instance();
	framewk.SetYunDunDefenderDlg(m_self_ptr);
	// 设置此对话框的图标。  当应用程序主窗口不是对话框时，框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码
	int nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
	int nScreenHeight = GetSystemMetrics(SM_CYSCREEN);

	// Calculate the new size and position of the window
	int nWindowWidth = nScreenWidth * 0.4;
	int nWindowHeight = nScreenHeight * 0.4;
	int nWindowLeft = (nScreenWidth - nWindowWidth) / 2;
	int nWindowTop = (nScreenHeight - nWindowHeight) / 2;

	// Set the size and position of the window
	SetWindowPos(NULL, nWindowLeft, nWindowTop, nWindowWidth, nWindowHeight, SWP_NOZORDER | SWP_NOACTIVATE);
	// 初始化Tab控件
	//m_TabCtrl.Create(WS_CHILD | WS_VISIBLE | TCS_FOCUSNEVER, CRect(0, 0, 0, 0), this, IDC_TABCTRL);
	//m_TabCtrl.ModifyStyle(0, TCS_FIXEDWIDTH | TCS_OWNERDRAWFIXED);

	// 添加Tab页
	//m_TabCtrl.InsertItem(0, _T("Page menu"));
	//m_TabCtrl.InsertItem(1, _T("Page scan"));

	// 创建Tab页对话框
	m_TabMenuWindow.Create(IDD_MENUWINDOW, &m_TabCtrl);
	m_TabScanWindow.Create(IDD_SCANWINDOW, &m_TabCtrl);


	// 设置MenuWindowDlg的m_pParentDlg成员变量指向CYunDunDefenderDlg
	m_TabMenuWindow.m_pParentDlg = this;
	m_TabScanWindow.m_pParentDlg = this;
	// 调整Tab页的位置和大小
	CRect rcClient;
	this->GetClientRect(&rcClient);
	//m_TabCtrl.GetClientRect(&rcClient);
	m_TabCtrl.MoveWindow(&rcClient);
	//rcClient.InflateRect(-2, -2);
	m_TabMenuWindow.MoveWindow(&rcClient);
	m_TabScanWindow.MoveWindow(&rcClient);

	// 显示第一个Tab页，隐藏其他Tab页
	m_TabMenuWindow.ShowWindow(SW_SHOW);
	m_TabScanWindow.ShowWindow(SW_HIDE);
	return TRUE;  // 除非将焦点设置到控件，否则返回 TRUE
}

// 如果向对话框添加最小化按钮，则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序，
//  这将由框架自动完成。

void CYunDunDefenderDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作区矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialogEx::OnPaint();
	}
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CYunDunDefenderDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}



//void CYunDunDefenderDlg::OnBnClickedDulldiskscan()
//{
//	// TODO: 在此添加控件通知处理程序代码
//}


//void CYunDunDefenderDlg::OnBnClickedCustomscan()
//{
//	CCustomFolderPickerDialog folderPickerDialog;
//	if (folderPickerDialog.DoModal() == IDOK)
//	{
//		std::vector<CString> selectedPaths = folderPickerDialog.m_selectedPaths;
//		for (const auto& path : selectedPaths)
//		{
//			// 处理选中的路径
//			// ...
//		}
//	}
//}

// CYunDunDefenderDlg.cpp
void CYunDunDefenderDlg::SwitchTab(int nTab)
{
	if (nTab == MENUTIME)
	{
		m_TabMenuWindow.ShowWindow(SW_SHOW);
		m_TabScanWindow.ShowWindow(SW_HIDE);
	}
	else if (nTab == SCANTIME)
	{
		m_TabMenuWindow.ShowWindow(SW_HIDE);
		m_TabScanWindow.ShowWindow(SW_SHOW);
	}
}


void CYunDunDefenderDlg::OnSize(UINT nType, int cx, int cy)
{
	CDialogEx::OnSize(nType, cx, cy);

	// TODO: 在此处添加消息处理程序代码
	int nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
	int nScreenHeight = GetSystemMetrics(SM_CYSCREEN);

	// Calculate the new size and position of the window
	int nWindowWidth = nScreenWidth * 0.3;
	int nWindowHeight = nScreenHeight * 0.3;
	int nWindowLeft = (nScreenWidth - nWindowWidth) / 2;
	int nWindowTop = (nScreenHeight - nWindowHeight) / 2;
	if (true)
	{

	}
	// Set the size and position of the window
	SetWindowPos(NULL, nWindowLeft, nWindowTop, nWindowWidth, nWindowHeight, SWP_NOZORDER | SWP_NOACTIVATE);
}

void CYunDunDefenderDlg::SetScanWindowProcess(std::wstring procss)
{
	m_TabScanWindow.SetProgress(procss);
}

void CYunDunDefenderDlg::SetScanWindowPath(std::wstring Path)
{
	m_TabScanWindow.SetPath(Path);
}

void CYunDunDefenderDlg::SetScanProcessCTL(DWORD dwclt)
{
	m_TabScanWindow.SetForProgress(dwclt);
}

void CYunDunDefenderDlg::SetScanDataBaseCTL(DWORD dwclt)
{
	m_TabScanWindow.SetForDatabase(dwclt);
}

std::wstring CYunDunDefenderDlg::GetSavePath()
{
	CString staticText;
	m_TabMenuWindow.m_save.GetWindowText(staticText);
	staticText += L"\\virusresults.json";
	return staticText.GetBuffer();
}

void CYunDunDefenderDlg::AddScanColor(DWORD dwclt)
{
	m_TabScanWindow.AddScanColor(dwclt);
}

void CYunDunDefenderDlg::SetReuilt(DWORD dwfilenumber, DWORD allfienumber, DWORD badFilenumber)
{
	m_TabMenuWindow.SetReuilt(dwfilenumber, allfienumber, badFilenumber);
}
// 在cpp文件中添加实现
void CYunDunDefenderDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
	CDialogEx::OnActivate(nState, pWndOther, bMinimized);

	if (nState == WA_ACTIVE || nState == WA_CLICKACTIVE)
	{
		// 窗口重新获得焦点时的操作
		// 如果需要隐藏Tab控件的标签，可以在这里调用相关函数
	}
}